/* Copyright 2013 University of Padua, Italy
 *
 */

package it.dei.unipd.healthservice.database;

import it.dei.unipd.healthservice.resource.Ordine;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * Rappresenta i dati di un ordine.
 * 
 * @author Nichele Dany
 * @version 1.00
 */
public class ViewOrdiniClienteDatabase {

	/**
	 * Interrogazione al database.
	 */
	private static final String STATEMENT = "SELECT * FROM Ordine WHERE mail = ?";
	private static final String GET_ID_STATEMENT = 
			"SELECT MAX(idordine) AS id " +
			"FROM ordine;";
			/*
			"SELECT idordine " +
			"FROM ordine " +
			"WHERE dataordine = ? and mail = ? " +
			"ORDER BY idordine limit 1;";
			*/

	/**
	 * Connessione al database
	 */
	private final Connection con;

	/**
	 * mail del cliente
	 */
	private final String mail;
	
	/**
	 * data dell'ordine
	 */
	private final Date dataordine;


	/**
	 * Risultati della ricerca
	 */
	private final List<Ordine> ordini;

	/**
	 * cerca tutti gli ordini effettuati dal cliente
	 * 
	 * @param con
	 *            connessione al database.
	 * @param mail
	 *            mail del cliente
	 */
	public ViewOrdiniClienteDatabase(Connection con, String mail) {
		this(con,mail,null);
	}
	
	public ViewOrdiniClienteDatabase(Connection con, String mail, Date dataordine) {
		this.con = con;
		this.mail = mail;
		ordini = new ArrayList<Ordine>();
		this.dataordine=dataordine;
	}

	/**
	 * cerca tutti gli ordini effettuati dal cliente
	 * 
	 * @return lista degli ordini.
	 * 
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public List<Ordine> viewOrdiniCliente() throws SQLException {

		PreparedStatement pstmt = null;
		ResultSet rs = null;

		try {
			pstmt = con.prepareStatement(STATEMENT);
			pstmt.setString(1, mail);

			rs = pstmt.executeQuery();

			while (rs.next()) {
				ordini.add(new Ordine(rs.getInt("idordine"),
						rs.getDate("dataordine"), 
						rs.getDate("dataspedizione"), 
						rs.getString("stato"), 
						rs.getInt("idrecapito"), 
						rs.getString("mail")));
			}
		} finally {
			if (rs != null) {
				rs.close();
			}

			if (pstmt != null) {
				pstmt.close();
			}

			con.close();
		}

		return ordini;
	}
	
	public Integer getIdOrdine() throws SQLException {

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = con.prepareStatement(GET_ID_STATEMENT);
			//pstmt.setDate(1, dataordine);
			//pstmt.setString(2, mail);
			rs = pstmt.executeQuery();
			if( rs.next()) return rs.getInt("id");

		} finally {
			if (rs != null) {
				rs.close();
			}

			if (pstmt != null) {
				pstmt.close();
			}
		}
		return -1;
	}
}
